<template>
  <view class="normal-login-container">
    <view class="logo-content align-center justify-center flex">
      <image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">
      </image>
      <text class="title">市国投集团公司移动端登录</text>
    </view>
    <view class="login-form-content">
      <view class="input-item flex align-center">
        <view class="iconfont icon-user icon"></view>
        <input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" maxlength="30" />
      </view>
      <view class="input-item flex align-center">
        <view class="iconfont icon-password icon"></view>
        <input v-model="loginForm.password" type="password" class="input" placeholder="请输入密码" maxlength="20" />
      </view>
      <view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
        <view class="iconfont icon-code icon"></view>
        <input v-model="loginForm.code" type="number" class="input" placeholder="请输入验证码" maxlength="4" />
        <view class="login-code"> 
          <image :src="codeUrl" @click="getCode" class="login-code-img"></image>
        </view>
      </view>
      <view class="action-btn">
        <button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">登录</button>
      </view>
      <view class="reg text-center" v-if="register">
        <text class="text-grey1">没有账号？</text>
        <text @click="handleUserRegister" class="text-blue">立即注册</text>
      </view>
      <view class="xieyi text-center">
        <text class="text-grey1">登录即代表同意</text>
        <text @click="handleUserAgrement" class="text-blue">《用户协议》</text>
        <text @click="handlePrivacy" class="text-blue">《隐私协议》</text>
      </view>
			
			<view class="wx-login-btn">
				<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" class="login-btn cu-btn block bg-blue lg round">
					微信一键登陆
				</button>
			</view>
			
    </view>
		
		<!-- 订阅消息确认弹窗 -->
		<view class="subscribe-modal" v-if="showSubscribeModal">
			<view class="modal-content">
				<text class="modal-title">消息订阅</text>
				<text class="modal-desc">为了及时获取重要通知，请允许接收相关消息提醒</text>
				
				<!-- 不再询问选项 -->
				<view class="remember-choice" @click="toggleRemember">
					<view class="checkbox" :class="{checked: rememberChoice}">
						<view class="check-icon" v-if="rememberChoice">✓</view>
					</view>
					<text class="remember-text">总是保持以上选择，不再询问</text>
				</view>
				
				<view class="modal-btns">
					<button @click="cancelSubscribe" class="modal-btn cancel">取消</button>
					<button @click="confirmSubscribe" class="modal-btn confirm">允许</button>
				</view>
			</view>
		</view>
     
  </view>
</template>

<script setup>
  import { ref, getCurrentInstance } from "vue"
  import { onLoad } from  "@dcloudio/uni-app"
  import { getToken, setToken } from '@/utils/auth'
  import { getCodeImg } from '@/api/login'
  import { useConfigStore, useUserStore } from '@/store'

  const { proxy } = getCurrentInstance()
  const globalConfig = useConfigStore().config
  const codeUrl = ref("")
  // 验证码开关
  const captchaEnabled = ref(true)
  // 用户注册开关
  const register = ref(false)
  const loginForm = ref({
    username: "admin",
    password: "admin123",
		// username: "",
		// password: "",
    code: "",
    uuid: ""
  })

  // 用户注册
  function handleUserRegister() {
    proxy.$tab.redirectTo(`/pages/register`)
  }

  // 隐私协议
  function handlePrivacy() {
    let site = globalConfig.appInfo.agreements[0]
    proxy.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
  }

  // 用户协议
  function handleUserAgrement() {
    let site = globalConfig.appInfo.agreements[1]
    proxy.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
  }

  // 获取图形验证码
  function getCode() {
    getCodeImg().then(res => {
      captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled
        if (captchaEnabled.value) {
          codeUrl.value = 'data:image/gif;base64,' + res.img
          loginForm.value.uuid = res.uuid
        }
    })
  }

  // 登录方法
  async function handleLogin() {
    if (loginForm.value.username === "") {
      proxy.$modal.msgError("请输入账号")
    } else if (loginForm.value.password === "") {
      proxy.$modal.msgError("请输入密码")
    } else if (loginForm.value.code === "" && captchaEnabled.value) {
      proxy.$modal.msgError("请输入验证码")
    } else {
      proxy.$modal.loading("登录中，请耐心等待...")
      pwdLogin()
    }
  }

  // 密码登录
  async function pwdLogin() {
    useUserStore().login(loginForm.value).then(() => {
      proxy.$modal.closeLoading()
      loginSuccess()
    }).catch(() => {
      if (captchaEnabled.value) {
        getCode()
      }
    })
  }

  // 登录成功后，处理函数
  function loginSuccess(result) {
    // 设置用户信息
    useUserStore().getInfo().then(res => {
      proxy.$tab.reLaunch('/pages/index')
    })
  }
	
	// 订阅消息模板ID列表，需要替换为实际项目中的模板ID
	let subscribeTemplateIds = ref([
		'c2BiWNVm9EpTn-7VHNctAWcpjrEDHk7AoOuHQcnscLg',
		'QC2podJeGMgFQDigoGNH4PY3epL950Tw4iFSQdGD3lk'
	])
	// 控制订阅消息弹窗显示
	let showSubscribeModal = ref(false)
	// 是否记住用户选择
	let rememberChoice = ref(false)
	// 取消订阅
	function cancelSubscribe() {
		// 如果用户选择了"不再询问"，保存其偏好
		if (rememberChoice.value) {
			uni.setStorageSync('subscriptionPreference', {
				allow: false,
				remember: true
			});
		}
		
		showSubscribeModal.value = false;
		// 进入首页
		this.$tab.reLaunch('/pages/index');
	}
	
	// 确认订阅，由用户点击触发
	function confirmSubscribe() {
		// 如果用户选择了"不再询问"，保存其偏好
		if (rememberChoice.value) {
			uni.setStorageSync('subscriptionPreference', {
				allow: true,
				remember: true
			});
		}
		
		showSubscribeModal.value = false;
		// 调起客户端小程序订阅消息界面
		this.requestSubscribeMessage();
		// 进入首页
		this.$tab.reLaunch('/pages/index');
	}
	
	// 调起客户端小程序订阅消息界面
	function requestSubscribeMessage() {
		// 判断是否是微信环境
		//#ifdef MP-WEIXIN
		wx.requestSubscribeMessage({
			tmplIds: subscribeTemplateIds.value,
			success: (res) => {
				console.log('订阅消息成功', res);
				// 可以根据res的结果记录用户订阅状态
			},
			fail: (err) => {
				console.error('订阅消息失败', err);
			}
		})
		//#endif
	}
	
	function getPhoneNumber(e) {
		console.log(e)
		
		wx.login({
		  success (resLogin) {
				console.log("resLogin: ", resLogin);
		    if (resLogin.code) {
		      uni.request({
		      	url: config.baseUrl + "/wxLogin",
		      	method: 'POST',
		      	data: {
		      		code: resLogin.code,
		      		encryptedIv: e.detail.iv,
		      		encryptedData: e.detail.encryptedData,
		      	},
		      	success: (wxLoginRes) => {
		      		console.log("wxLoginRes: ", wxLoginRes.data.token);
							that.$store.commit('SET_TOKEN', wxLoginRes.data.token)
							setToken(wxLoginRes.data.token)
							// 检查用户是否有保存的订阅偏好，如果没有则显示弹窗
							const savedPreference = uni.getStorageSync('subscriptionPreference');
							if (!savedPreference || !savedPreference.remember) {
								that.showSubscribeModal = true;
							} else {
								// 如果有保存的偏好且选择了记住，检查是否需要订阅
								if (savedPreference.allow) {
									that.requestSubscribeMessage();
								}
								that.$tab.reLaunch('/pages/index');
							}
		      	}
		      })
		    } else {
		      console.log('登录失败！' + res.errMsg)
		    }
		  }
		})
	}

  onLoad(() => {
    //#ifdef H5
    if (getToken()) {
      proxy.$tab.reLaunch('/pages/index')
    }
    //#endif
  })

  getCode()
</script>

<style lang="scss" scoped>
  page {
    background-color: #ffffff;
  }

  .normal-login-container {
    width: 100%;

    .logo-content {
      width: 100%;
      font-size: 21px;
      text-align: center;
      padding-top: 15%;

      image {
        border-radius: 4px;
      }

      .title {
        margin-left: 10px;
      }
    }

    .login-form-content {
      text-align: center;
      margin: 20px auto;
      margin-top: 15%;
      width: 80%;

      .input-item {
        margin: 20px auto;
        background-color: #f5f6f7;
        height: 45px;
        border-radius: 20px;

        .icon {
          font-size: 38rpx;
          margin-left: 10px;
          color: #999;
        }

        .input {
          width: 100%;
          font-size: 14px;
          line-height: 20px;
          text-align: left;
          padding-left: 15px;
        }

      }

      .login-btn {
        margin-top: 40px;
        height: 45px;
      }
      
      .reg {
        margin-top: 15px;
      }
      
      .xieyi {
        color: #333;
        margin-top: 20px;
      }
      
      .login-code {
        height: 38px;
        float: right;
      
        .login-code-img {
          height: 38px;
          position: absolute;
          margin-left: 10px;
          width: 200rpx;
        }
      }
    }
  }
</style>
